/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.losalpes.reportes;

/**
 *
 * @author Henry.Quiroga
 */
import com.losalpes.buy.IBuyService;
import com.losalpes.client.IClientService;
import com.losalpes.persistence.entity.Ciudad;
import com.losalpes.persistence.entity.Cliente;
import com.losalpes.persistence.entity.Compra;
import com.losalpes.persistence.entity.CompraMuebles;
import com.losalpes.persistence.entity.ItemCompra;
import com.losalpes.persistence.entity.TipoMueble;
import com.sun.facelets.tag.jstl.core.ForEachHandler;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.model.SelectItem;

/**
 *
 * @author abarrero
 */
public class ReportesBean {

    @EJB
    IBuyService buyService;
    @EJB
    IClientService clientService;
    int ciudad, departamento, pais;
    String documento;
    Date fechaHoy = new Date(), fechaIni = new Date(), fechaFin = new Date();

    /**
     * Obtiene el identificador de la ciudad seleccionada
     * @return
     */
    public int getCiudad() {
        return ciudad;
    }

    /**
     * Establece el identificador de la ciudad seleccionada
     * @param ciudad
     */
    public void setCiudad(int ciudad) {
        this.ciudad = ciudad;
    }

    /**
     * Obtiene el identificador departamento seleccionado
     * @return
     */
    public int getDepartamento() {
        return departamento;
    }

    /**
     * Establece el departamento
     * @param departamento
     */
    public void setDepartamento(int departamento) {
        this.departamento = departamento;
    }

    /**
     * Obtiene el identificador del pais seleccionado
     * @return
     */
    public int getPais() {
        return pais;
    }

    /**
     * Establece el identificador del pais seleccionado
     * @param pais
     */
    public void setPais(int pais) {
        this.pais = pais;
    }

    /**
     * Obtiene la fecha de fin para consultas
     * @return
     */
    public Date getFechaFin() {
        return fechaFin;
    }

    /**
     * Establece la fecha de fin para consultas
     * @param fechaFin
     */
    public void setFechaFin(Date fechaFin) {
        this.fechaFin = fechaFin;
    }

    /**
     * Obtiene la fecha actual
     * @return
     */
    public Date getFechaHoy() {
        return fechaHoy;
    }

    /**
     * Establece la fecha actual
     * @param fechaHoy
     */
    public void setFechaHoy(Date fechaHoy) {
        this.fechaHoy = fechaHoy;
    }

    /**
     * Obtiene la fecha de inicio para consultas
     * @return
     */
    public Date getFechaIni() {
        return fechaIni;
    }

    /**
     * Establece la fecha de inicio para consultas
     * @param fechaIni
     */
    public void setFechaIni(Date fechaIni) {
        this.fechaIni = fechaIni;
    }

    /**
     * Obtiene la lista de paises
     * @return
     */
    public SelectItem[] getPaises() {
        return clientService.getPaises();
    }

    /**
     * Obtiene la lista de departamentos
     * @return
     */
    public SelectItem[] getDepartamentos() {
        return clientService.getDepartamentos(pais);
    }

    /**
     * Obtiene la lista de ciudades
     * @return
     */
    public SelectItem[] getCiudades() {
        return clientService.getCiudades(departamento, pais);
    }

    /**
     * Obtiene una lista de documentos
     * @return
     */
    public SelectItem[] getDocumentos() {
        return buyService.getDocumentos();
    }

    /**
     * Obtiene el documento seleccionado
     * @return
     */
    public String getDocumento() {
        return documento;
    }

    /**
     * Establece el documento seleccionado
     */
    public void setDocumento(String documento) {
        this.documento = documento;
    }

    /**
     * Obtiene el nombre de la ciudad basado en el identificador
     * @return
     */
    public String getNombreCiudad() {
        return buyService.nombreCiudad(ciudad);
    }

    /**
     * Obtiene las compras de un cliente
     * @return
     */
    public List getComprasCliente() {
        Cliente cliente = clientService.getClienteByDocumento(documento);
         List<Compra> lcCompras  = buyService.comprasCliente(cliente);

        ArrayList<CompraMuebles> lcCompras2 = new ArrayList<CompraMuebles>();

        for (Compra compra : lcCompras) {
            if (compra.getCliente().getDocumento().equals(documento)) {
                String muebles = "";
                for (ItemCompra item : compra.getItems()) {
                    muebles += item.getMueble().getNombre() + " ";
                }

                lcCompras2.add(new CompraMuebles(compra, muebles));
            }
        }

        return lcCompras2;

    }

    /**
     * Obtiene la lista de ciudadades para el producto mas vendido
     * @return
     */
    public List getProductoMasVendidoList() {
        return buyService.productoMasVendido(new java.sql.Date(fechaIni.getTime()), new java.sql.Date(fechaFin.getTime()));
    }

    /**
     * Obtiene la lista de ventas diarias para muebles exteriores en el rango de
     * fecha y ciudad definido
     * @return
     */
    public List getExteriores() {
        Ciudad cCiudad = clientService.getCiudadById(ciudad);
        return buyService.ventasDiariasTipo(cCiudad, new java.sql.Date(fechaIni.getTime()), new java.sql.Date(fechaFin.getTime()), TipoMueble.Exterior);
    }

    /**
     * Obtiene la lista de ventas diarias para muebles interiores en el rango de
     * fecha y ciudad definido
     * @return
     */
    public List getInteriores() {
        Ciudad cCiudad = clientService.getCiudadById(ciudad);
        return buyService.ventasDiariasTipo(cCiudad, new java.sql.Date(fechaIni.getTime()), new java.sql.Date(fechaFin.getTime()), TipoMueble.Interior);
    }
}
